package com.zhihuishu.micro.course.service;

import java.util.List;
import java.util.Set;

import com.zhihuishu.micro.course.dto.LessonDto;
import com.zhihuishu.micro.course.model.CourseVideoForBatis;
import com.zhihuishu.micro.course.model.Lesson;

/**
 * 
 * @author zhanglikun
 * @date 2015年10月28日 下午2:13:15
 */
public interface LessonService extends IBaseService<Lesson> {

    

    LessonDto get(Integer lessonId);

    /**
     * 主键列表查询
     * 
     * @param lessonIds
     * @return
     */
    List<LessonDto> list(List<Integer> lessonIds);

    /**
     * 根据章ID查询节列表
     * 
     * @param chapterId
     * @return
     */
    List<LessonDto> list(int chapterId);

    /**
     * 更新节哈希缓存
     * 
     * @param lessonId
     * @return 从数据库中查询的节对象
     */
    LessonDto touchLesson(int lessonId);
    /**
     * @Description:更新Hash
     *  @date:@2017年1月9日下午2:57:15
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:void
     */
    void touchLesson(LessonDto lessonDto);

    /**
     * 向课程中添加节缓存(关系)
     * 
     * @param courseId
     * @param lessonId
     */
    void addLessonOnCourseRedis(long courseId, int lessonId);

    /**
     * 从课程中移除节缓存(关系)
     * 
     * @param courseId
     * @param lessonId
     */
    void removeLessonOnCourseRedis(long courseId, int lessonId);

    /**
     * 根据章ID列表，查询视频数(不包含有子节部分)
     * 
     * @param chapterIds
     * @return
     */
    int countVideos(List<Integer> chapterIds);

    /**
     * 根据课程ID集合查询节
     * 
     * @author ztl
     * @param courseIds
     * @return
     */
    List<CourseVideoForBatis> getLessonByCourseIds(List<Long> courseIds);

    /**
     * 根据章ID获取节列表
     * 
     * @author ztl
     * @param chapterId
     * @return
     */
    List<LessonDto> getLessonListFromDb(Integer chapterId);
    /**
     * @Description:为app提供建课新增接口
     *  @date:@2016年12月7日下午6:22:30
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:void
     */
    void saveLessonForApp(LessonDto lessonDto, Long userId);
    /**
     * @Description:查询指定章下在顺序之后的节
     *  @date:@2016年12月8日下午12:21:00
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<Lesson>
     */
    List<Integer> queryLessonsByChapterIdAndOrderNumber(Integer chapterId, Integer orderNumber);
    /**
     * @Description:为指定章下 指定排序后的节顺序-1  (指定排序的节被删除了 该节后面的所有节的序号要-1)
     *  @date:@2016年12月8日下午1:33:24
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:void
     */
    void updateMinusOrderByChapterIdAndLessonOrderNumber(Integer chapterId, Integer orderNumber);
    
    List<Integer> queryLessonIdsContainSmallOrder(Integer chapterId, int targerRankSmall, int orginRankBig);
    
    
    List<Integer> queryLessonIdsContainBigOrder(Integer chapterId, int targerRankBig, int orginRankSmall);
    /**
     * @Description:清除节上关于视频的信息
     *  @date:@2016年12月9日下午1:26:26
     *  @author:嵇鹏
     * @param lessonVideoCount 
     *  @Param:
     *  @retuen:void
     */
    void updateLessonVideoInfoAndChildCount(Integer lessonId, int lessonVideoCount);
    /**
     * @Description:更新节中小节的数量
     *  @date:@2016年12月9日下午4:41:46
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:void
     */
    void updateChildCount(Integer count, Integer lessonId);
    /**
     * @Description:更新节存在知识点状态
     *  @date:@2016年12月12日下午5:34:41
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:void
     */
    void updatLessonKnowLedgeFlag(Integer lessonId, int i);
    
    Set<String> queryLessonIdsByCourseId(long courseId);
    
    /**
     * @Description:根据courseId查询lessonIds
     *  @date:@2017年3月3日上午11:17:42
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:List<Integer>
     */
    List<Integer> getlessonIdsByCourseId(long courseId);

  
}
